import random
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
import pandas as pd
from selenium.webdriver.chrome.options import Options

# 存储爬取的数据
h = []


def fanfai(url, j):
    """
    爬取指定URL页面的招聘信息，并保存到CSV文件中

    :param url: 要爬取的URL
    :param j: 当前页码
    :return: 更新后的页码
    """
    # 初始化Chrome浏览器
    data = webdriver.Chrome()
    # 设置隐式等待时间
    data.implicitly_wait(70)
    # 打开指定URL
    data.get(url)

    try:
        # 查找所有的招聘信息元素
        elements = data.find_elements(By.XPATH, './/ul[@class="job-list-box"]/li')
        for i in elements:
            # 提取岗位信息
            wezhi = i.find_element(By.XPATH, './/div[1]/a/div[1]/span[1]').text
            # 提取地址信息
            dizhi = i.find_element(By.XPATH, './/div[1]/a/div[1]/span[2]/span').text
            # 提取工资信息
            jinqian = i.find_element(By.XPATH, './/div[1]/a/div[2]/span').text
            # 提取经验要求
            jinyan = i.find_element(By.XPATH, './/div[1]/a/div[2]/ul/li[1]').text
            # 提取学历要求
            xueli = i.find_element(By.XPATH, './/div[1]/a/div[2]/ul/li[2]').text
            # 提取公司网站
            gosiwhangzhi = i.find_element(By.XPATH, './/div[1]/div/div[2]/h3/a').get_attribute('href')
            # 提取公司名字
            gosiminzi = i.find_element(By.XPATH, './/div[1]/div/div[2]/h3/a').text
            # 提取技术要求
            jishu = i.find_element(By.XPATH, './/div[@class="job-card-footer clearfix"]/ul').text

            # 将提取的信息添加到列表中
            h.append([wezhi, dizhi, jinqian, jinyan, xueli, gosiwhangzhi, gosiminzi, jishu])

        # 将列表转换为DataFrame，并保存到CSV文件中
        frame = pd.DataFrame(h, columns=[
            '招聘工作岗位', '公司地址', '工资', '需要的经验', '学历', '公司网站', '公司名字', '需要学的技术'
        ])
        frame.to_csv('招聘信息.csv', index=False)

        # 增加页码计数
        j += 1
        print(f'这个页面爬取成功，第{j}页')

        return j

    except Exception as e:
        # 如果发生异常，打印错误信息并跳过该页面
        print('这个页面未找到，跳过爬取!')
        return j


if __name__ == '__main__':
    # 初始化页码计数
    j = 1

    # 搜索关键词列表
    k = [
        '%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E6%8A%80%E6%9C%AF',
        'java',
        'c%2B%2B',
        'python%E7%88%AC%E8%99%AB',
        'python%E7%A0%94%E5%8F%91'
    ]

    # 城市代码
    p = ['100010000']

    for y in k:
        # 生成页码列表
        page = list(range(1, 10))
        # 随机打乱页码顺序
        random.shuffle(page)
        # 随机暂停一段时间
        time.sleep(random.random() * 60)

        for i in page:
            # 构造URL
            url = f'https://www.zhipin.com/web/geek/job?query={y}&city=100010000&page={i}'
            # 爬取页面信息
            j = fanfai(url, j)